#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/statvfs.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <pthread.h>
#include <sched.h>
#include <ctype.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <linux/if.h>


#define FILE_DEV "/proc/scsi/scsi"

static int find_device()
{
    char buf[1024];
    int len;
    int dev_num = 0;
    char * seek = NULL;
    FILE * fd = NULL;

    fd = fopen(FILE_DEV, "r");
    if (fd != NULL) {
        // 最多读取count个项，每个项size个字节，如果调用成功返回实际读取到的项个数（小于或等于count），如果不成功或读到文件末尾返回 0。
        /*size_t  fread(  void *buffer, size_t size, size_t count, FILE *stream )
           buffer 是读取的数据存放的内存的指针（可以是数组，也可以是新开辟的空间，buffer就是一个索引） 
           size   是每次读取的字节数  
           count  是读取次数  
           strean 是要读取的文件的指针  */

        len = fread(buf, 1, 1024, fd);	// 三个读取上差不多,但返回值不一样;return 实际读到的
        //len = fread(buf, 512, 2, fd);	// return 2
        //len = fread(buf, 1024, 1, fd);  // return 1
        //printf("len = %d buf = %s\n", len, buf);
    
        if (len > 0) {
            seek = buf;
            while (seek) {
                seek = strstr(seek, "Host: scsi");
                if (seek) {
                    seek += strlen("Host: scsi");
                    seek = strstr(seek, "Type");
                    if (seek) {
                        seek += strlen("Type");
                        while (* seek == ' ')
                            seek++;
                        dev_num++;
                    }
                }
            }
            printf("dev_num = %d\n", dev_num);
        }
    }
    else {
        perror(FILE_DEV);
    }

    fclose(fd);
    printf("fclose file\n");

    return dev_num;
}

int main()
{
    while(1) {
        find_device();
        sleep(1);
    }
}

